﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using Biosek;

namespace DatasetFileConverter
{
	public partial class Form1 : Form
	{
		public Form1()
		{
			InitializeComponent();
		}

		/// <summary>
		/// Evento click del boton añadir, abre el cuadro de dialogo de abrir para seleccionar archivos
		/// </summary>		
		private void btnAdd_Click(object sender, EventArgs e)
		{			
			openFileDialog.ShowDialog();
		}

		/// <summary>
		/// Soporte para añadir multiples archivos desde el cuadro de dialogo del sistema
		/// </summary>		
		private void openFileDialog_FileOk(object sender, CancelEventArgs e)
		{
			listBox1.Items.AddRange(openFileDialog.FileNames);
		}

		/// <summary>
		/// El doble click sobre un elemento, lo elimina
		/// </summary>
		private void listBox1_DoubleClick(object sender, EventArgs e)
		{
			if (listBox1.SelectedItem != null)
			{
				listBox1.Items.Remove(listBox1.SelectedItem);
			}
		}

		/// <summary>
		/// Evento click del boton eliminar
		/// </summary>		
		private void btnDelete_Click(object sender, EventArgs e)
		{
			if (listBox1.SelectedItem != null)
			{
				listBox1.Items.Remove(listBox1.SelectedItem);
			}
		}

		/// <summary>
		/// Eventos para soportar arrastrar y soltar archivos sobre el cuadro de lista
		/// </summary>		
		private void Form1_DragDrop(object sender, DragEventArgs e)
		{
			var fmt = e.Data.GetFormats();
			if (fmt.Contains("FileDrop"))
			{
				string[] data = (string[])e.Data.GetData("FileDrop");
				listBox1.Items.AddRange(data);
			}
		}

		/// <summary>
		/// Eventos para soportar arrastrar y soltar archivos sobre el cuadro de lista
		/// </summary>		
		private void Form1_DragEnter(object sender, DragEventArgs e)
		{
			var fmt = e.Data.GetFormats();
			if (fmt.Contains("FileDrop"))
			{
				e.Effect = DragDropEffects.Link;
			}
		}

		Random rnd = new Random();

		/// <summary>
		/// Evento disparado cuando se da click al boton de convertir
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		private void btnConvert_Click(object sender, EventArgs e)
		{
			progressBar1.Maximum = listBox1.Items.Count;
			progressBar1.Value = 0;
			foreach (string item in listBox1.Items)
			{
				var src = item;
				if (sender == btnConvertARFF)
				{
					var dst = Path.ChangeExtension(item, "arff");
					DestinoToARFF.Convert(src, dst, null);
				}
				else if (sender == btnConvertCSV)
				{
					var dst = Path.ChangeExtension(item, "csv");
					DestinoToCSV.Convert(src, dst, null);
				}
				progressBar1.Value++;
			}
		}

		/// <summary>
		/// Evento de click del boton Detalles
		/// </summary>		
		private void btnDetails_Click(object sender, EventArgs e)
		{
			var fn = listBox1.SelectedItem as string;		
			var ext = Path.GetExtension(fn).ToLower();
			if (ext == ".csv")
			{
				throw new NotImplementedException();
			}
			else if (ext == ".destino")
			{
				throw new NotImplementedException();
			}
			else
			{
				MessageBox.Show("Las unicas extensiones validas son DESTINO y CSV");
			}
		}

		private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
		{
			btnDetails.Enabled = listBox1.SelectedItem != null;
			btnDelete.Enabled = listBox1.SelectedItem != null;
		}
	}
}
